﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;

namespace SoftwareConsulting.Interfaces.BasicEntities
{
    /// <summary>
    /// Интерфейс именованной иерархии
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface INamedHierarchy<T> : IHierarchy<T>, INamed where T : INamed
    {
        /// Сортирует элементы иерархии в алфавитном порядке согласно текущей культуре и без учета регистра
        /// </summary>        
        void Sort();
        /// <summary>
        /// Сортирует элементы иерархии в алфавитном порядке с учетом культуры и опций сравнения
        /// </summary>
        void Sort(CultureInfo culture, CompareOptions options);
        /// <summary>
        /// Возвращает полное название элемента (с учетом его родителей)
        /// </summary>
        /// <remarks>разделитель между родительским элементом и текущим - точка</remarks>
        string FullName { get; }
        /// <summary>
        /// Возвращает название элемента с учетом его глубины
        /// </summary>
        /// <remarks>добавляет пробелы перед названием</remarks>        
        string NameWithDeep { get; }
        /// <summary>
        /// Возвращает первый встреченный элемент по его имени (нерекурсивно)
        /// </summary>
        /// <param name="needName"></param>
        /// <returns></returns>
        T GetFirstItemByName(string needName);
        /// <summary>
        /// Возвращает элементы с указанным именем
        /// </summary>                
        INamedHierarchy<T> GetItemsByName(string needName, bool recursively);        
        /*/// <summary>
        /// Удаляет элемент по его имени
        /// </summary>
        /// <param name="needName"></param>
        /// <returns></returns>
        List<Guid> DeleteByName(string needName);*/
    }
}
